import { useState, useEffect } from 'react';

/**
 * 防抖Hook
 *
 * 用于延迟执行值的更新，常用于搜索输入等场景
 *
 * @template T - 值的类型
 * @param value - 需要防抖的值
 * @param delay - 延迟时间（毫秒）
 * @returns 防抖后的值
 *
 * @example
 * ```tsx
 * const [searchTerm, setSearchTerm] = useState('');
 * const debouncedSearchTerm = useDebounce(searchTerm, 300);
 *
 * // 当用户输入时，debouncedSearchTerm 会在300ms后更新
 * const results = useSearchResults(debouncedSearchTerm);
 * ```
 */
export function useDebounce<T>(value: T, delay: number): T {
  // 防抖后的值
  const [debouncedValue, setDebouncedValue] = useState<T>(value);

  useEffect(() => {
    // 设置定时器，延迟更新值
    const timer = setTimeout(() => setDebouncedValue(value), delay);

    // 清理函数：组件卸载或依赖变化时清除定时器
    return () => clearTimeout(timer);
  }, [value, delay]);

  return debouncedValue;
}